草庐IT

C++11 auto 和 size_type

全部标签

VS2012 中的 c++11 线程/互斥锁实现 - 触发断言

我想将我的代码从boost-转移到std-threads。虽然我认为这应该很简单,但我遇到了奇怪的问题。下面的代码是一个最小的示例,它使用VS2012触发断言“f:\dd\vctools\crt_bld\self_x86\crt\src\thr\mutex.c(131):unlockofunownedmutex”。搜索这个会出现olderbugreports(我认为)应该已经修复了。intresult=0;std::mutexm;m.lock();std::threadt1([&](){result=42;m.unlock();});m.lock();std::cout有人可以向我解释

c++ - 如何在 Visual Studio 中使用 C++11 线程

在开始之前,我想说明一下,我是一名新手,很可能我错过了一些简单的事情,或者我只是不知道一些简单的事情。我想使用visualstudio进行一些线程练习,但我无法将其包含在我的代码顶部。我知道这是C++11的新功能,但我不确定它是否已为VisualStudio2010启用,或者如果未启用,我不确定我将如何去做。这是我的代码的截图: 最佳答案 你不能:C++11的线程支持库不受VS2010附带的C++标准库的实现支持。如果你想使用它,你应该升级到VS2012。或者,您可以使用Boost.Thread,它为C++11的标准线程支持库提供了

c++ - C++11 是否强制要求 vector<int> 将 resize() 中的元素归零?

这个问题在这里已经有了答案:std::vector,defaultconstruction,C++11andbreakingchanges(2个答案)关闭9年前。这个问题是关于new[]int和new[]int()在语义和性能上的差异,以及在向allocator_traits::construct添加ctor参数的完美转发时可能无意中创建的从第一个到第二个措辞的变化().这个问题不涉及一个非常明显的问题,即默认ctor运行在由vector的resize()构造的所有新元素上。对我来说,在调整大小时清除内置类型vector的元素似乎是一种浪费。但是VS2012的实现使得resize(n)

C++11 从初始化列表到数组参数的隐式转换

在C++11中,是否可以做类似下面的事情?templatevoidfoo(arraysrc){...}...foo({1,2,3})我目前正在运行GCC4.8。 最佳答案 是的,我设法完成了以下工作(因为您允许类似的事情):templatevoidfoo(arraysrc){...}...foo('a','b');foo(1,2,3);方法如下:#include#include#includeusingnamespacestd;templatevoidfoo(arraysrc){for(autoe:src)coutautomake_

c++ - C++ 字符串中 "size"和 "capacity"之间的区别?

我有ThinkinginC++中的这个片段。#include#includeintmain(){stringbigNews("IsawElvisinaUFO.");cout我得到如下所示的输出:IsawElvisinaUFO.thoughtIIsawElvisinaUFO.Size=33Capacity=44thoughtIIsawElvisinaUFO.I'vebeenworkingtoohard.Size=60Capacity=88我能弄清楚为什么大小会增加,但我无法弄清楚容量是如何增加的?我所知道的是Capacity是我们可以在其中进行Pushback的字符串缓冲区,但是该空间是

c++11 线程不修改相同的值

我正在编写一个(理想情况下)需要两个线程同时运行的程序。我有一个全局vector变量myObjects来跟踪我的对象:vectormyObjects;还有一个MoND类型的对象,它将承担繁重的工作。它使用vector作为参数进行初始化,并将“对象”插入vector。到目前为止没问题。MoNDmySim=MoND(myObjects);在main中,需要使用myObjects作为参数调用mySim的方法。在我用于测试的非线程版本中,这有效(在100次迭代后运行bails):intmain(intargc,char**argv){...mySim.Run(myObjects);//Runs

c++ - 在标准 (C++11) 的哪个地方说余数运算符仅适用于整数类型?

我想要标准(n3242/3291/3290)中关于定义余数运算符不适用于浮点类型的位置的指针。余数运算符%定义在5.6.2Thebinary/operatoryieldsthequotient,andthebinary%operatoryieldstheremainderfromthedivisionofthefirstexpressionbythesecond.Ifthesecondoperandof/or%iszerothebehaviorisundefined.Forintegraloperandsthe/operatoryieldsthealgebraicquotientwit

c++ - 函数指针 : is the simple canonical use bad from a performance point of view? 如果是的话,c++11-ish 的替代方案是什么?

我在我的c++代码中经常使用函数指针,总是以符合这个简单规范示例的方式使用(例如,函数具有相同的I/O,但所需的操作只是在运行时已知):#includeusingnamespacestd;intadd(intfirst,intsecond){returnfirst+second;}intsubtract(intfirst,intsecond){returnfirst-second;}intoperation(intfirst,intsecond,int(*functocall)(int,int)){return(*functocall)(first,second);}intmain()

c++ - std::make_pair、c++11 和显式模板参数

这个问题在这里已经有了答案:C++11make_pairwithspecifiedtemplateparametersdoesn'tcompile(1个回答)关闭7年前。重新编辑:首先,这只是一个好奇的问题,我知道,std::pair或许多其他解决方案可以根除这个问题。你能告诉我,下面这个问题的背后究竟是什么吗?此代码是一个在c++03上运行但在c++11上失败的简单示例。std::pairgetsth(int*param){returnstd::make_pair(param,0);}intmain(intargc,char*argv[]){int*a=newint(1);std::

c++ - malloc 和堆 : extra memory for storing the size and linked list information?

我有一个关于heap和malloc的简单问题:当我们使用malloc分配一些内存空间时,如下所示:int*p;p=(int*)malloc(10*sizeof(int));它实际上在堆中分配了10个单词。但是,我的问题是:实际使用的内存空间真的是10个字?或者还有其他额外的空间需要存储内存大小的值?或者,甚至,因为堆的结构是链表,是否有其他内存空间用于存储指向堆中列表的下一个节点的地址? 最佳答案 它完全依赖于实现。a)它可以在每个分配的节点之前有几个字节,其中包含节点的大小、指向下一个节点的指针,可能还有前一个节点指针和节点类型。